﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ORMDemo.Core.Validate
{
    public class ValidateEmailVerify : BaseValidateAttribute
    {
        public override bool Validate(object value)
        {
            return value!=null && !string.IsNullOrWhiteSpace(value.ToString())&& IsValidEmail(value.ToString());
        }
        /// <summary>
        /// 验证邮箱地址是否有效
        /// </summary>
        /// <param name="mobileNumber">邮箱地址，可以是字符串或其他类型</param>
        /// <returns>是否有效</returns>
        public static bool IsValidEmail(string emailStr)
        {
            try
            {
                // 使用更全面的正则表达式验证邮箱格式
                // 这个正则表达式符合RFC 5322标准
                string pattern = @"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$";

                // 使用正则表达式进行匹配
                bool isMatch = Regex.IsMatch(emailStr, pattern);

                // 额外检查：确保域名部分包含点号
                if (isMatch && emailStr.Contains("@"))
                {
                    string domainPart = emailStr.Split('@')[1];
                    if (!domainPart.Contains("."))
                    {
                        return false;
                    }
                }

                return isMatch;
            }
            catch (RegexMatchTimeoutException)
            {
                return false;
            }
        }
    }
}
